<?php
class loginmanager extends MySQL_Connector {
	public $log;
	public $rangs;
	
	public function __construct() {
		parent::__construct();
		$this->log = new log();
		$this->rangs = general::get_rangs();
	}

	public function __destruct() {
		parent::__destruct();
	}
	
	public function login($link_if_unauthorized, $link_if_login_success) {
		if (string::are_variables_not_empty(array($_POST['bn'], $_POST['pw']))) {
			$this -> username = string::clean_var($_POST['bn'], $this->con);
			$this -> password = hash("sha256", string::clean_var($_POST['pw'], $this->con));
			$sql = "SELECT * FROM user WHERE username = '" . $this -> username . "'";
			$result = $this -> con -> query($sql);
			if (mysqli_num_rows($result) == 1) {
				$benutzer = mysqli_fetch_assoc($result);
				if ($benutzer['state'] == 1) {
					if ($benutzer['password'] == $this -> password) {
						$_SESSION['bn'] = $this -> username;
						$_SESSION['pw'] = $this -> password;
						$_SESSION['rang'] = $benutzer['rang'];
						if (!empty($link_if_login_success)) {
							echo "<script type=\"text/javascript\">location.href = '".$link_if_login_success."';</script>";
						}
					} else {
						$this -> log -> add_log_entry(new log_entry("Sie haben ein falsches Passwort eingegeben.", "error"));
					}
				} else {
					$this -> log -> add_log_entry(new log_entry("Der Benutzer wurde noch nicht freigeschalten.", "error"));
				}
			} else {
				$this -> log -> add_log_entry(new log_entry("Der Benutzer existiert nicht.", "error"));
			}
		} else {
			if (!empty($link_if_unauthorized)) {
				echo "<script type=\"text/javascript\">location.href = '".$link_if_unauthorized."';</script>";
			}
		}
	}

	public function check_login($admin = "Benutzer") {
		if (isset($_SESSION['bn'], $_SESSION['pw'])) {
			$sql = "SELECT * FROM user WHERE username = '" . string::clean_var($_SESSION['bn'], $this->con) . "'";
			$result = $this -> con -> query($sql);
			if (mysqli_num_rows($result) == 1) {
				$benutzer = mysqli_fetch_assoc($result);
				if ($benutzer['state'] == 1) {
					if ($benutzer['password'] == $_SESSION['pw']) {
						if ($admin == "Administrator") {
							if ($benutzer['rang'] == "Administrator") {
								global $GLO_USER;
								$GLO_USER = $benutzer;
							} else {
								$this->show_message("Diese Seite kann man nur als Administrator sehen.");
							}
						} else {
							global $GLO_USER;
							$GLO_USER = $benutzer;
						}
					} else {
						$this->show_message("<div align=\"center\">Login ist ung&uuml;ltig.<br /><a href=\"../index.php?page=login\">Bitter hier erneut einloggen</a></div>");
					}
				} else {
					$this->show_message("<div align=\"center\">Login ist ung&uuml;ltig.<br /><a href=\"../index.php?page=login\">Bitter hier erneut einloggen</a></div>");
				}
			} else {
				$this->show_message("<div align=\"center\">Login ist ung&uuml;ltig.<br /><a href=\"../index.php?page=login\">Bitter hier erneut einloggen</a></div>");
			}
		} else {
			$this->show_message("<div align=\"center\">Login ist ung&uuml;ltig.<br /><a href=\"../index.php?page=login\">Bitter hier erneut einloggen</a></div>");
		}
	}
	
	public function allowed_is($rang, $show_message) {
		if(array_key_exists($rang, $this->rangs)) {
			if($this->rangs[$_SESSION["rang"]] >= $this->rangs[$rang]) {
				return true;
			} else {
				if($show_message) {
					$this->show_message("Diese Seite kann man nur als Administrator sehen.", false);
				}
				return false;
			}
		}
	}
	
	private function show_message($msg, $die = true)
	{
		if($die) {
			die($msg);
		} else {
			echo $msg;
			return false;
		}
	}

	public function logout($login_site) {
		session_destroy();
		echo "<script type=\"text/javascript\">location.href = '".$login_site."';</script>";
	}

}
?>